package ar.uba.is2.ec.matem.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ar.uba.is2.common.mensaje.contenido.Identificador;
import ar.uba.is2.common.utils.HibernateUtil;
import ar.uba.is2.ec.matem.dao.MedicionDao;
import ar.uba.is2.ec.matem.datos.Medicion;

public class MedicionDaoImpl implements MedicionDao {

	public void guardar(Medicion medicion) {
		Session session = null;
		try {
			session = HibernateUtil.getSession();
			Transaction tx = session.beginTransaction();

			session.save(medicion);

			tx.commit();
			session.flush();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public Medicion obtenerMedicion(Identificador identificador) {
		
		Session session = null;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			
			String query = "from Medicion m where m.coordenada.latitud = :lat and m.coordenada.longitud = :long and m.tipoMedicion = :tMed order by m.timestamp desc";
			
			Query q = session.createQuery(query).setDouble("lat",
					identificador.getCoordenada().getLatitud()).setDouble(
							"long", identificador.getCoordenada().getLongitud())
							.setString("tMed", identificador.getValorIdentificador());
			
			List<Medicion> resultados = q.list();
			
			session.flush();
			
			if (resultados.size() > 0) {
				return resultados.iterator().next();
			} else {
				return null;
			}
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

}
